package com.zzyy.study.mq.dto;

import lombok.Data;

import java.util.Objects;

/**
 * @auther zzyy
 * @create 2024-08-24 18:00
 * 对于多条消息，通过（producer、producerBusId）这两个字段来判断是否是同一条消息，
 * 若他们的这两个字段的值是一样的，则表示他们是同一条消息。
 */
@Data
public class Msg<T> {
    /**
     * 生产者名称
     */
    private String producer;
    /**
     * 生产者这边消息的唯一标识
     */
    private String producerBusId;
    /**
     * 消息体，主要是消息的业务数据
     */
    private T body;

    public Msg() {
    }

    public Msg(String producer, String producerBusId, T body) {
        this.producer = producer;
        this.producerBusId = producerBusId;
        this.body = body;
    }

    public static <T> Msg<T> msg(String producer, String producerBusId, T body) {
        Objects.nonNull(producer);
        Objects.nonNull(producerBusId);
        Objects.nonNull(body);
        return new Msg<>(producer, producerBusId, body);
    }
}

